🎖️GitЯра🎖️
src/helpers/esp32/TBeamBoard.cpp 93b2db63de9009af047a2d0e1bcd97b4b0ba7106 (93b2db63) Text, 12.41 KB
Tff7b72#Tff7b72if defined(TBEAM_SUPREME_SX1262) || defined(TBEAM_SX1262) || defined(TBEAM_SX1276)
Tff7b72#Tff7b72include T8b949e<Arduino.h>
Tff7b72#Tff7b72include T8b949e"TBeamBoard.h"
T8b949e//#include <RadioLib.h>
Tffa657uint32_t Te6edf3deviceOnline Tff7b72= T79c0ff0x00Tb4b4b4;
Tffa657bool Te6edf3pmuInterruptTb4b4b4;
Tff7b72static Tffa657void Td2a8ffsetPmuFlagTb4b4b4(Tb4b4b4)
Tb4b4b4{
Te6edf3pmuInterrupt Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffTBeamBoard::beginTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ESP32BoardTff7b72:Tff7b72:Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef TBEAM_SUPREME_SX1262
T8b949e// On the T-Beam S3 Supreme the PMU + RTC sit on Wire1 (GPIO 42/41, brought
T8b949e// up by XPowersLib), while the SH1106 OLED and the BME280/QMC6310 sensors
T8b949e// sit on the primary bus, Wire (GPIO PIN_BOARD_SDA/PIN_BOARD_SCL). Nothing
T8b949e// else initialises Wire on this board, so the display driver would
T8b949e// otherwise talk on the wrong (default) pins and display.begin() fails,
T8b949e// leaving the screen blank. Bring the OLED bus up here.
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3PIN_BOARD_SDATb4b4b4, Te6edf3PIN_BOARD_SCLTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3power_initTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//Configure user button
Te6edf3pinModeTb4b4b4(Te6edf3PIN_USER_BTNTb4b4b4, Te6edf3INPUTTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifndef TBEAM_SUPREME_SX1262
Te6edf3digitalWriteTb4b4b4(Te6edf3P_LORA_TX_LEDTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; T8b949e//inverted pin for SX1276 - HIGH for off
Tff7b72#Tff7b72endif
T8b949e//radiotype_detect();
Te6edf3esp_reset_reason_t Te6edf3reason Tff7b72= Te6edf3esp_reset_reasonTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3reason Tff7b72=Tff7b72= Te6edf3ESP_RST_DEEPSLEEPTb4b4b4) Tb4b4b4{
Tffa657long Te6edf3wakeup_source Tff7b72= Te6edf3esp_sleep_get_ext1_wakeup_statusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wakeup_source Tff7b72& Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Te6edf3P_LORA_DIO_1Tb4b4b4)Tb4b4b4) Tb4b4b4{ T8b949e// received a LoRa packet (while in deep sleep)
Te6edf3startup_reason Tff7b72= Te6edf3BD_STARTUP_RX_PACKETTb4b4b4;
Tb4b4b4}
Te6edf3rtc_gpio_hold_disTb4b4b4(Tb4b4b4(Te6edf3gpio_num_tTb4b4b4)Te6edf3P_LORA_NSSTb4b4b4)Tb4b4b4;
Te6edf3rtc_gpio_deinitTb4b4b4(Tb4b4b4(Te6edf3gpio_num_tTb4b4b4)Te6edf3P_LORA_DIO_1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72ifdef MESH_DEBUG
Tffa657void Td2a8ffTBeamBoard::scanDevicesTb4b4b4(Te6edf3TwoWire Tff7b72*Te6edf3wTb4b4b4)
Tb4b4b4{
Tffa657uint8_t Te6edf3errTb4b4b4, Te6edf3addrTb4b4b4;
Tffa657int Te6edf3nDevices Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3start Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffScanning I2C for DevicesTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Te6edf3addr Tff7b72= T79c0ff1Tb4b4b4; Te6edf3addr Tff7b72< T79c0ff127Tb4b4b4; Te6edf3addrTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3start Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wTff7b72-Tff7b72>Te6edf3beginTransmissionTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4; Te6edf3delayTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3err Tff7b72= Te6edf3wTff7b72-Tff7b72>Te6edf3endTransmissionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3err Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3nDevicesTff7b72+Tff7b72+Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3addrTb4b4b4) Tb4b4b4{
Tff7b72case T79c0ff0x77Tb4b4b4:
Tff7b72case T79c0ff0x76Tb4b4b4:
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffFound BME280 SensorTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3BME280_ONLINETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff0x34Tb4b4b4:
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffFound AXP192/AXP2101 PMUTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3POWERMANAGE_ONLINETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff0x3CTb4b4b4:
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffFound SSD1306/SH1106 displayTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3DISPLAY_ONLINETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff0x51Tb4b4b4:
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffFound PCF8563 RTCTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3PCF8563_ONLINETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff0x1CTb4b4b4:
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffFound QMC6310 MAG SensorTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3QMC6310_ONLINETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Tffea00\tTa5d6ffI2C device found at address 0xTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3addr Tff7b72< T79c0ff16Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3addrTb4b4b4, Te6edf3HEXTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ff !Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3err Tff7b72=Tff7b72= T79c0ff4Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffUnknow error at address 0xTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3addr Tff7b72< T79c0ff16Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3addrTb4b4b4, Te6edf3HEXTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nDevices Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffNo I2C devices foundTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffScan for devices is complete.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ffGPS RX pin: %dTa5d6ff"Tb4b4b4, Te6edf3PIN_GPS_RXTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff GPS TX pin: %dTa5d6ff"Tb4b4b4, Te6edf3PIN_GPS_TXTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffTBeamBoard::printPMUTb4b4b4(Tb4b4b4)
Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffisCharging:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3isChargingTb4b4b4(Tb4b4b4) Tff7b72? Ta5d6ff"Ta5d6ffYESTa5d6ff" Tff7b72: Ta5d6ff"Ta5d6ffNOTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffisDischarge:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3isDischargeTb4b4b4(Tb4b4b4) Tff7b72? Ta5d6ff"Ta5d6ffYESTa5d6ff" Tff7b72: Ta5d6ff"Ta5d6ffNOTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffisVbusIn:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3isVbusInTb4b4b4(Tb4b4b4) Tff7b72? Ta5d6ff"Ta5d6ffYESTa5d6ff" Tff7b72: Ta5d6ff"Ta5d6ffNOTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffgetBattVoltage:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getBattVoltageTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffmVTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffgetVbusVoltage:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getVbusVoltageTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffmVTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffgetSystemVoltage:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getSystemVoltageTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ffmVTa5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// The battery percentage may be inaccurate at first use, the PMU will automatically
T8b949e// learn the battery curve and will automatically calibrate the battery percentage
T8b949e// after a charge and discharge cycle
Tff7b72if Tb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3isBatteryConnectTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffgetBatteryPercent:Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getBatteryPercentTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tffa657bool Td2a8ffTBeamBoard::power_initTb4b4b4(Tb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PMUTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72ifdef TBEAM_SUPREME_SX1262
Te6edf3PMU Tff7b72= Tff7b72new Te6edf3XPowersAXP2101Tb4b4b4(Te6edf3PMU_WIRE_PORTTb4b4b4, Te6edf3PIN_BOARD_SDA1Tb4b4b4, Te6edf3PIN_BOARD_SCL1Tb4b4b4, Te6edf3I2C_PMU_ADDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3PMU Tff7b72= Tff7b72new Te6edf3XPowersAXP2101Tb4b4b4(Te6edf3PMU_WIRE_PORTTb4b4b4, Te6edf3PIN_BOARD_SDATb4b4b4, Te6edf3PIN_BOARD_SCLTb4b4b4, Te6edf3I2C_PMU_ADDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PMUTff7b72-Tff7b72>Te6edf3initTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffWarning: Failed to find AXP2101 power managementTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72delete Te6edf3PMUTb4b4b4;
Te6edf3PMU Tff7b72= Tffa657NULLTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffAXP2101 PMU init succeeded, using AXP2101 PMUTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PMUTb4b4b4) Tb4b4b4{
Te6edf3PMU Tff7b72= Tff7b72new Te6edf3XPowersAXP192Tb4b4b4(Te6edf3PMU_WIRE_PORTTb4b4b4, Te6edf3PIN_BOARD_SDATb4b4b4, Te6edf3PIN_BOARD_SCLTb4b4b4, Te6edf3I2C_PMU_ADDTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PMUTff7b72-Tff7b72>Te6edf3initTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffWarning: Failed to find AXP192 power managementTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72delete Te6edf3PMUTb4b4b4;
Te6edf3PMU Tff7b72= Tffa657NULLTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffAXP192 PMU init succeeded, using AXP192 PMUTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PMUTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Te6edf3deviceOnline Tff7b72|Tff7b72= Te6edf3POWERMANAGE_ONLINETb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setChargingLedModeTb4b4b4(Te6edf3XPOWERS_CHG_LED_CTRL_CHGTb4b4b4)Tb4b4b4;
T8b949e// Set up PMU interrupts
Te6edf3pinModeTb4b4b4(Te6edf3PIN_PMU_IRQTb4b4b4, Te6edf3INPUT_PULLUPTb4b4b4)Tb4b4b4;
Te6edf3attachInterruptTb4b4b4(Te6edf3PIN_PMU_IRQTb4b4b4, Te6edf3setPmuFlagTb4b4b4, Te6edf3FALLINGTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getChipModelTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3XPOWERS_AXP192Tb4b4b4) Tb4b4b4{
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_LDO2Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up LoRa power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_LDO2Tb4b4b4)Tb4b4b4; T8b949e//Enable the LoRa power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_DCDC1Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up OLED power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC1Tb4b4b4)Tb4b4b4; T8b949e//Enable the OLED power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_LDO3Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up GPS power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_LDO3Tb4b4b4)Tb4b4b4; T8b949e//Enable the GPS power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setProtectedChannelTb4b4b4(Te6edf3XPOWERS_DCDC1Tb4b4b4)Tb4b4b4; T8b949e//Protect the OLED power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setProtectedChannelTb4b4b4(Te6edf3XPOWERS_DCDC3Tb4b4b4)Tb4b4b4; T8b949e//Protect the ESP32 power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC2Tb4b4b4)Tb4b4b4; T8b949e//Disable unsused power rail DC2
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disableIRQTb4b4b4(Te6edf3XPOWERS_AXP192_ALL_IRQTb4b4b4)Tb4b4b4; T8b949e//Disable PMU IRQ
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setChargerConstantCurrTb4b4b4(Te6edf3XPOWERS_AXP192_CHG_CUR_450MATb4b4b4)Tb4b4b4; T8b949e//Set battery charging current
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setChargeTargetVoltageTb4b4b4(Te6edf3XPOWERS_AXP192_CHG_VOL_4V2Tb4b4b4)Tb4b4b4; T8b949e//Set battery charge-stop voltage
Tb4b4b4}
Tff7b72else Tff7b72ifTb4b4b4(Te6edf3PMUTff7b72-Tff7b72>Te6edf3getChipModelTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3XPOWERS_AXP2101Tb4b4b4)Tb4b4b4{
Tff7b72#Tff7b72ifdef TBEAM_SUPREME_SX1262
T8b949e//Set up the GPS power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO4Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO4Tb4b4b4)Tb4b4b4;
T8b949e//Set up the LoRa power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO3Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO3Tb4b4b4)Tb4b4b4;
T8b949e//Set up power rail for the M.2 interface
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_DCDC3Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC3Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ESP_SLEEP_WAKEUP_UNDEFINED Tff7b72=Tff7b72= Te6edf3esp_sleep_get_wakeup_causeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffPower off and restart ALDO BLDO..Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO1Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO2Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_BLDO1Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff250Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e//Set up power rail for QMC6310U
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO2Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO2Tb4b4b4)Tb4b4b4;
T8b949e//Set up power rail for BME280 and OLED
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO1Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO1Tb4b4b4)Tb4b4b4;
T8b949e//Set up pwer rail for SD Card
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_BLDO1Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_BLDO1Tb4b4b4)Tb4b4b4;
T8b949e//Set up power rail BLDO2 to headers
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_BLDO2Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_BLDO2Tb4b4b4)Tb4b4b4;
T8b949e//Set up power rail DCDC4 to headers
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_DCDC4Tb4b4b4, Te6edf3XPOWERS_AXP2101_DCDC4_VOL2_MAXTb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC4Tb4b4b4)Tb4b4b4;
T8b949e//Set up power rail DCDC5 to headers
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_DCDC5Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC5Tb4b4b4)Tb4b4b4;
T8b949e//Disable unused power rails
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC2Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DLDO1Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DLDO2Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_VBACKUPTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
T8b949e//Turn off unused power rails
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC2Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC3Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC4Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DCDC5Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO1Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO4Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_BLDO1Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_BLDO2Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DLDO1Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disablePowerOutputTb4b4b4(Te6edf3XPOWERS_DLDO2Tb4b4b4)Tb4b4b4;
T8b949e//PMU->disablePowerOutput(XPOWERS_CPULDO);
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_VBACKUPTb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up GPS RTC power
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_VBACKUPTb4b4b4)Tb4b4b4; T8b949e//Turn on GPS RTC power
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO2Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up LoRa power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO2Tb4b4b4)Tb4b4b4; T8b949e//Enable LoRa power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerChannelVoltageTb4b4b4(Te6edf3XPOWERS_ALDO3Tb4b4b4, T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//Set up GPS power rail
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enablePowerOutputTb4b4b4(Te6edf3XPOWERS_ALDO3Tb4b4b4)Tb4b4b4; T8b949e//Enable GPS power rail
Tff7b72#Tff7b72endif
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disableIRQTb4b4b4(Te6edf3XPOWERS_AXP2101_ALL_IRQTb4b4b4)Tb4b4b4; T8b949e//Disable all PMU interrupts
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setChargerConstantCurrTb4b4b4(Te6edf3XPOWERS_AXP2101_CHG_CUR_500MATb4b4b4)Tb4b4b4; T8b949e//Set battery charging current to 500mA
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setChargeTargetVoltageTb4b4b4(Te6edf3XPOWERS_AXP2101_CHG_VOL_4V2Tb4b4b4)Tb4b4b4; T8b949e//Set battery charging cutoff voltage to 4.2V
Tb4b4b4}
Te6edf3PMUTff7b72-Tff7b72>Te6edf3clearIrqStatusTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e//Clear interrupt flags
Te6edf3PMUTff7b72-Tff7b72>Te6edf3disableTSPinMeasureTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e//Disable TS detection, since it is not used
T8b949e//Enable voltage measurements
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enableSystemVoltageMeasureTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enableVbusVoltageMeasureTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3PMUTff7b72-Tff7b72>Te6edf3enableBattVoltageMeasureTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef MESH_DEBUG
Te6edf3scanDevicesTb4b4b4(Tff7b72&Te6edf3WireTb4b4b4)Tb4b4b4;
Te6edf3printPMUTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
T8b949e// Set the power key off press time
Te6edf3PMUTff7b72-Tff7b72>Te6edf3setPowerKeyPressOffTimeTb4b4b4(Te6edf3XPOWERS_POWEROFF_4STb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72pragma region "Debug code"
T8b949e// void TBeamBoard::radiotype_detect(){
T8b949e// static SPIClass spi;
T8b949e// char chipTypeInfo;
T8b949e// #if defined(P_LORA_SCLK)
T8b949e// spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
T8b949e// #endif
T8b949e// for(int i = 0; i<radioVersions; i++){
T8b949e// switch(i){
T8b949e// case 0:
T8b949e// CustomSX1262 radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1, spi);
T8b949e// int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
T8b949e// if (status != RADIOLIB_ERR_NONE) {
T8b949e// Serial.print("ERROR: SX1262 not found: ");
T8b949e// Serial.println(status);
T8b949e// //delete radio;
T8b949e// radio = NULL;
T8b949e// break;
T8b949e// }
T8b949e// else{
T8b949e// MESH_DEBUG_PRINTLN("SX1262 detected");
T8b949e// P_LORA_BUSY = 32;
T8b949e// RADIO_CLASS = CustomSX1262;
T8b949e// WRAPPER_CLASS = CustomSX1262Wrapper;
T8b949e// SX126X_RX_BOOSTED_GAIN = true;
T8b949e// SX126X_CURRENT_LIMIT = 140;
T8b949e// //delete radio;
T8b949e// radio = NULL;
T8b949e// break;
T8b949e// }
T8b949e// case 1:
T8b949e// SX1276 radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1, spi);
T8b949e// int status1 = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
T8b949e// if (status1 != RADIOLIB_ERR_NONE) {
T8b949e// Serial.print("ERROR: SX1272 not found: ");
T8b949e// Serial.println(status1);
T8b949e// //delete radio;
T8b949e// radio = NULL;
T8b949e// }
T8b949e// else{
T8b949e// MESH_DEBUG_PRINTLN("SX1272 detected");
T8b949e// P_LORA_BUSY = RADIOLIB_NC;
T8b949e// P_LORA_DIO_2 = 32;
T8b949e// RADIO_CLASS = CustomSX1272;
T8b949e// WRAPPER_CLASS = CustomSX1272Wrapper;
T8b949e// SX127X_CURRENT_LIMIT = 120;
T8b949e// //delete radio;
T8b949e// radio = NULL;
T8b949e// return;
T8b949e// }
T8b949e// default:
T8b949e// }
T8b949e// }
T8b949e// }
Tff7b72#Tff7b72pragma endregion
Tff7b72#Tff7b72endif
Served by rngit 1.5.2 - Generated in 0.06s